var store = (function() {
	var api = {},
		win = window,
		doc = win.document,
		localStorageName = 'localStorage',
		globalStorageName = 'globalStorage',
		tableKeys = [],
		storage;

	api.set = function(key, value) {};
	api.get = function(key) {};
	api.remove = function(key) {};
	api.clear = function() {};

	if(localStorageName in win && win[localStorageName]) {
		storage = win[localStorageName];
		api.set = function(key, val) {
			storage.setItem(key, JSON.stringify(val))
		};
		api.get = function(key) {
			return JSON.parse(storage.getItem(key))
		};
		api.remove = function(key) {
			storage.removeItem(key)
		};
		api.clear = function() {
			storage.clear()
		};
		api.forEach = function() {

			return storage;
		}

	} else if(globalStorageName in win && win[globalStorageName]) {
		storage = win[globalStorageName][win.location.hostname];
		api.set = function(key, val) {
			storage[key] = val
		};
		api.get = function(key) {
			return JSON.parse(storage[key]) && JSON.parse(storage[key].value)
		};
		api.remove = function(key) {
			delete storage[key]
		};
		api.clear = function() {
			for(var key in storage) {
				delete storage[key]
			}
		};

	} else if(doc.documentElement.addBehavior) {
		function getStorage() {
			if(storage) {
				return storage
			}
			storage = doc.body.appendChild(doc.createElement('div'));
			storage.style.display = 'none';
			// See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx
			// and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx
			storage.addBehavior('#default#userData');
			storage.load(localStorageName);
			return storage;
		}
		api.set = function(key, val) {
			var storage = getStorage();
			storage.setAttribute(key, JSON.stringify(val));
			storage.save(localStorageName);
		};
		api.get = function(key) {
			var storage = getStorage();
			return JSON.parse(storage.getAttribute(key));
		};
		api.remove = function(key) {
			var storage = getStorage();
			storage.removeAttribute(key);
			storage.save(localStorageName);
		}
		api.clear = function() {
			var storage = getStorage();
			var attributes = storage.XMLDocument.documentElement.attributes;;
			storage.load(localStorageName);
			for(var i = 0, attr; attr = attributes[i]; i++) {
				storage.removeAttribute(attr.name);
			}
			storage.save(localStorageName);
		}
	}
	return api;

})();